package com.gxuwz.stats.config;

import org.springframework.context.annotation.Configuration;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

@Configuration
public class DateConfig {

    /**
     * 将 UTC 时间字符串转换为本地 LocalDate
     *
     * @param utcDateTime UTC 时间字符串（格式：2024-07-31T16:00:00.000Z）
     * @return 本地 LocalDate
     */
    public static LocalDate convertToLocalDate(String utcDateTime) {
        if (utcDateTime == null || utcDateTime.isEmpty()) {
            throw new IllegalArgumentException("UTC 时间字符串不能为空");
        }
        Instant instant = Instant.parse(utcDateTime);
        ZoneId zoneId = ZoneId.systemDefault();
        return instant.atZone(zoneId).toLocalDate();
    }

    /**
     * 将 UTC 时间字符串转换为本地 LocalDateTime
     *
     * @param utcDateTime UTC 时间字符串（格式：2024-07-31T16:00:00.000Z）
     * @return 本地 LocalDateTime
     */
    public static LocalDateTime convertToLocalDateTime(String utcDateTime) {
        if (utcDateTime == null || utcDateTime.isEmpty()) {
            throw new IllegalArgumentException("UTC 时间字符串不能为空");
        }
        Instant instant = Instant.parse(utcDateTime);
        ZoneId zoneId = ZoneId.systemDefault();
        return instant.atZone(zoneId).toLocalDateTime();
    }

    /**
     * 将本地日期时间格式化为指定格式的字符串
     *
     * @param localDateTime 本地日期时间
     * @param pattern       格式模式（如：yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss）
     * @return 格式化后的字符串
     */
    public static String formatLocalDateTime(LocalDateTime localDateTime, String pattern) {
        if (localDateTime == null || pattern == null || pattern.isEmpty()) {
            throw new IllegalArgumentException("参数不能为空");
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return localDateTime.format(formatter);
    }

    /**
     * 将本地日期格式化为指定格式的字符串
     *
     * @param localDate 本地日期
     * @param pattern   格式模式（如：yyyy-MM-dd）
     * @return 格式化后的字符串
     */
    public static String formatLocalDate(LocalDate localDate, String pattern) {
        if (localDate == null || pattern == null || pattern.isEmpty()) {
            throw new IllegalArgumentException("参数不能为空");
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return localDate.format(formatter);
    }
}
